#ifndef STACK_H
#define STACK_H

#include <stdio.h>
#include <stdlib.h>

#define MAXSIZE 5

void errif(int result,char *message);

//realize order stack
typedef struct _OrderStack
{
    int size;
    int top;
    int data[MAXSIZE];
}OrderStack;

void OrderStack_create_stack(OrderStack *s);

void OrderStack_push(OrderStack *s,int x);

void OrderStack_pop(OrderStack *s);

int OrderStack_top(OrderStack *s);

//realize shared stack
 typedef struct _SharedStack
 {
     int top_one;
     int top_two;
     int data[MAXSIZE];
 }SharedStack;

 void SharedStack_clean_stack(SharedStack *s);

 void SharedStack_push_one(SharedStack *s,int x);

 void SharedStack_pop_one(SharedStack *s);

 int SharedStack_top_one(SharedStack *s);

 void SharedStack_push_two(SharedStack *s,int x);

 void SharedStack_pop_two(SharedStack *s);

 int SharedStack_top_two(SharedStack *s);

//realize linked stack

typedef struct _LinkedStack
{
    int data;
    struct _LinkedStack *next;
}LinkedStack;

void LinkedStack_create_stack(LinkedStack *s);

void LinkedStack_destroy_stack(LinkedStack *s);

void LinkedStack_push(LinkedStack *s,int x);

void LinkedStack_pop(LinkedStack *s);

int LinkedStack_top(LinkedStack *s);

#endif